// 不含资源的单元结构体
#[derive(Debug, Clone, PartialEq)]
struct Nil;
// 一个包含资源的元组结构体,它实现了`clone`trait
#[derive(Debug, Clone)]
struct Pair(Box<i32>, Box<i32>);
fn main() {
//     实例化`Nil`
    let nil = Nil;
//     复制`Nil`,没有资源用于移动(move)
//     let copied_nil = nil;
    //^nil已经被移动,断言出现异常
    let copied_nil = nil.clone();
//     两个`Nil`都可以独立使用
    println!("original: {:?}", nil);
    println!("copy: {:?}", copied_nil);
    assert_eq!(nil, copied_nil);
//     ^断言成功
//     实例化`Pair`
    let pair = Pair(Box::new(1), Box::new(2));
    println!("original: {:?}", pair);
//     将`pair`绑定到`moved_pair`,移动(move)了资源
    let moved_pair = pair;
    println!("copy: {:?}", moved_pair);
//     报错`pair`已失去了它的资源.
//     println!("original: {:?}", pair);
//     将`moved_pair`复制到`cloned_pair`
    let cloned_pair = moved_pair.clone();
//    使用std::mem::drop来销毁原始的`pair`
    drop(moved_pair);
//     报错!`pair`已被销毁
//     println!("copy: {:?}", moved_pair);

//     由.clone()得来的结果仍然可用!
    println!("clone: {:?}->{},{}",cloned_pair,*cloned_pair.0,*cloned_pair.1);
}